curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/tasks/matching \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_tasks": [
{
"task_id": "a7844da2-b2b2-42da-818a-006785d8e78d",
"weekly_hours": 8
},
{
"task_id": "dc6b2225-fa29-4c4b-8102-b218b70a8287"
}
],
"target_tasks": [
{
"task_id": "d7b51744-5c02-4274-85ac-d6fe1a480a85"
},
{
"task_id": "960bc9a9-cbaa-4c84-8539-7c0755b27ef9",
"weekly_hours": 4
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/tasks/matching"
payload = {
"source_tasks": [{
"task_id": "a7844da2-b2b2-42da-818a-006785d8e78d",
"weekly_hours": 8
}, { "task_id": "dc6b2225-fa29-4c4b-8102-b218b70a8287" }],
"target_tasks": [
{ "task_id": "d7b51744-5c02-4274-85ac-d6fe1a480a85" },
{
"task_id": "960bc9a9-cbaa-4c84-8539-7c0755b27ef9",
"weekly_hours": 4
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
source_tasks: [
{task_id: 'a7844da2-b2b2-42da-818a-006785d8e78d', weekly_hours: 8},
{task_id: 'dc6b2225-fa29-4c4b-8102-b218b70a8287'}
],
target_tasks: [
{task_id: 'd7b51744-5c02-4274-85ac-d6fe1a480a85'},
{task_id: '960bc9a9-cbaa-4c84-8539-7c0755b27ef9', weekly_hours: 4}
]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/tasks/matching', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant_name}.{region}.techwolf.ai/tasks/matching",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source_tasks' => [
[
'task_id' => 'a7844da2-b2b2-42da-818a-006785d8e78d',
'weekly_hours' => 8
],
[
'task_id' => 'dc6b2225-fa29-4c4b-8102-b218b70a8287'
]
],
'target_tasks' => [
[
'task_id' => 'd7b51744-5c02-4274-85ac-d6fe1a480a85'
],
[
'task_id' => '960bc9a9-cbaa-4c84-8539-7c0755b27ef9',
'weekly_hours' => 4
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenant_name}.{region}.techwolf.ai/tasks/matching"
payload := strings.NewReader("{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant_name}.{region}.techwolf.ai/tasks/matching")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/tasks/matching")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"score": 0.42
}Get the task-based match score between two task sets
Get the symmetric task-based match score between two explicit sets of tasks, computed directly from their task embeddings. Unlike the job task-match endpoints, the two sides are caller-supplied task lists rather than job profiles. Each task may carry an optional weekly_hours weight, so tasks with more weekly hours contribute proportionally more to the score; when weekly_hours is omitted the tasks are weighted equally, reducing to an unweighted mean. The score is a continuous task similarity, harmonic-meaned across both directions, and is symmetric. Swapping the two sets yields the same score.
curl --request POST \
--url https://{tenant_name}.{region}.techwolf.ai/tasks/matching \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"source_tasks": [
{
"task_id": "a7844da2-b2b2-42da-818a-006785d8e78d",
"weekly_hours": 8
},
{
"task_id": "dc6b2225-fa29-4c4b-8102-b218b70a8287"
}
],
"target_tasks": [
{
"task_id": "d7b51744-5c02-4274-85ac-d6fe1a480a85"
},
{
"task_id": "960bc9a9-cbaa-4c84-8539-7c0755b27ef9",
"weekly_hours": 4
}
]
}
'import requests
url = "https://{tenant_name}.{region}.techwolf.ai/tasks/matching"
payload = {
"source_tasks": [{
"task_id": "a7844da2-b2b2-42da-818a-006785d8e78d",
"weekly_hours": 8
}, { "task_id": "dc6b2225-fa29-4c4b-8102-b218b70a8287" }],
"target_tasks": [
{ "task_id": "d7b51744-5c02-4274-85ac-d6fe1a480a85" },
{
"task_id": "960bc9a9-cbaa-4c84-8539-7c0755b27ef9",
"weekly_hours": 4
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
source_tasks: [
{task_id: 'a7844da2-b2b2-42da-818a-006785d8e78d', weekly_hours: 8},
{task_id: 'dc6b2225-fa29-4c4b-8102-b218b70a8287'}
],
target_tasks: [
{task_id: 'd7b51744-5c02-4274-85ac-d6fe1a480a85'},
{task_id: '960bc9a9-cbaa-4c84-8539-7c0755b27ef9', weekly_hours: 4}
]
})
};
fetch('https://{tenant_name}.{region}.techwolf.ai/tasks/matching', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant_name}.{region}.techwolf.ai/tasks/matching",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'source_tasks' => [
[
'task_id' => 'a7844da2-b2b2-42da-818a-006785d8e78d',
'weekly_hours' => 8
],
[
'task_id' => 'dc6b2225-fa29-4c4b-8102-b218b70a8287'
]
],
'target_tasks' => [
[
'task_id' => 'd7b51744-5c02-4274-85ac-d6fe1a480a85'
],
[
'task_id' => '960bc9a9-cbaa-4c84-8539-7c0755b27ef9',
'weekly_hours' => 4
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenant_name}.{region}.techwolf.ai/tasks/matching"
payload := strings.NewReader("{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant_name}.{region}.techwolf.ai/tasks/matching")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant_name}.{region}.techwolf.ai/tasks/matching")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source_tasks\": [\n {\n \"task_id\": \"a7844da2-b2b2-42da-818a-006785d8e78d\",\n \"weekly_hours\": 8\n },\n {\n \"task_id\": \"dc6b2225-fa29-4c4b-8102-b218b70a8287\"\n }\n ],\n \"target_tasks\": [\n {\n \"task_id\": \"d7b51744-5c02-4274-85ac-d6fe1a480a85\"\n },\n {\n \"task_id\": \"960bc9a9-cbaa-4c84-8539-7c0755b27ef9\",\n \"weekly_hours\": 4\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"score": 0.42
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Query Parameters
If set to explained, the response will include an explanation of the match.
simple, explained "explained"
Body
A pair of task sets to compare. Both sides are explicit lists of existing tasks, each optionally weighted by weekly hours; the match score is computed directly from their task embeddings.
Source task set. Must contain between 1 and 100 tasks; every task_id must reference an existing Task in the system.
1 - 100 elementsShow child attributes
Show child attributes
[
{
"task_id": "a7844da2-b2b2-42da-818a-006785d8e78d",
"weekly_hours": 8
},
{
"task_id": "dc6b2225-fa29-4c4b-8102-b218b70a8287"
}
]
Target task set. Must contain between 1 and 100 tasks; every task_id must reference an existing Task in the system.
1 - 100 elementsShow child attributes
Show child attributes
[
{
"task_id": "d7b51744-5c02-4274-85ac-d6fe1a480a85"
},
{
"task_id": "960bc9a9-cbaa-4c84-8539-7c0755b27ef9",
"weekly_hours": 4
}
]
Response
OK
- Simple
- Explained
An ad-hoc task-based match result between two task sets.
The symmetric task-based match score between the two task sets, expressed as a number between 0 and 1.
0 <= x <= 10.42
Was this page helpful?